package object3;

/**
 * 接口练习
 */
public class ExtendsVSInterface {

    public static void main(String[] args) {

        /*
            继承的价值：解决代码的复用性和可维护性
            接口的价值：设计好规范，使代码更加灵活，在一定程度上实现代码的解耦(接口规范性+动态绑定机制)
         */

        LittleMonkey wuKong=new LittleMonkey("悟空");

        wuKong.climbing();

        wuKong.swimming();

        wuKong.flying();
    }
}

class Monkey {

    private String name;

    public Monkey(String name) {
        this.name = name;
    }
    public void climbing() {
        System.out.println(name + " 会爬树...");
    }
    public String getName() {
        return name;
    }
}

//接口
interface Fishable {
    void swimming();
}

interface Birdable {
    void flying();
}

//继承
//小结：当子类继承了父类，就自动地拥有父类的功能
//如果子类需要扩展功能，可以通过实现接口的方式扩展
//可以理解成接口是对 java 单继承机制的一种补充
class LittleMonkey extends Monkey implements Fishable, Birdable {

    public LittleMonkey(String name) {
        super(name);
    }


    @Override
    public void flying() {
        System.out.println(getName() + " 通过学习，可以像鱼儿一样游泳...");
    }

    @Override
    public void swimming() {
        System.out.println(getName() + " 通过学习，可以像鸟儿一样飞翔...");
    }
}